home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mission 3
/
Mission 3.zip
/
Mission 3.iso
/
texte
/
jane152
/
scl
/
fonlist.scl
< prev
next >
Wrap
Text File
|
1998-10-29
|
5KB
|
162 lines
# Dieses Makropaket demonstriert die Verwaltung einer einfachen
# Telefondatei. Die Datei wird zur Bearbeitung stets in eine globale
# Listenvariable namens 'liste' eingelesen. Diese Variable enthält
# immer abwechselnd einen Namen und eine Telefonnummer, dargestellt
# durch Zeichenketten.
global liste; # Die Listenvariable
# Der Makro 'datei_festlegen' fordert den Anwender auf, die Telefondatei
# auszuwählen. Anschließend wird der Dateiname im SCEleton-Environment
# gespeichert, damit er über die Lebensdauer der Makrosequenz hinaus
# erhalten bleibt.
datei_festlegen()
begin
set name to fileselect('C:\DIVERSE\*.*', '', 'Telefonliste auswählen');
if ( name != '' ) # Hat der Anwender 'Abbruch' gewählt?
begin
setenv('PHONELIST', name); # Name speichern
lprint('Gewählt ist ''%s''', name);
return 1; # Erfolg an Aufrufer melden
end
else
begin
lprint('Keine Datei gewählt.');
return 0; # Mißerfolg melden
end
end
# Der Makro 'liste_sichern' schreibt den Inhalt von 'liste' in die Datei,
# deren Name in der Environment-Variablen 'PHONELIST' steht. Das Dateiformat
# besteht aus Zeilen, die jeweils einen Namen und die dazugehörige Nummer
# enthalten, getrennt durch Kommata, und mit CR/LF abgeschlossen sind.
liste_sichern()
begin
set name to getenv('PHONELIST');# Name aus dem Environment abrufen
if ( name == '' ) # Noch kein Name gespeichert?
begin
if ( datei_festlegen() ) # Dann den Anwender auffordern
set name to getenv('PHONELIST');
else
return 0;
end
set datei to Fcreate(name); # Datei anlegen bzw. löschen
set i to 0;
set max to @liste;
while ( i < max ) # Liste durchlaufen
begin
set zeile to string("%s,%s\r\n",
liste[i], liste[i + 1]); # eine Zeile formatieren
Fwrite(datei, 0, zeile); # und in die Datei schreiben
set i to i + 2;
end
Fclose(datei); # Datei schließen
return 1;
end
# 'liste_lesen' liest den Inhalt der Telefondatei in die Variable 'liste'.
# Eine gelesene Zeile wird mit 'split' in Name und Nummer zerlegt und an die
# Liste angehängt.
liste_lesen()
begin
set name to getenv('PHONELIST'); # Name abrufen, wie oben
if ( name == '' )
begin
if ( datei_festlegen() )
set name to getenv('PHONELIST');
else
return 0;
end
set liste to $$$;
set datei to Fopen(name); # Datei öffnen
do
begin
set zeile to Freadline(datei); # eine Zeile lesen
if ( zeile[0] != '' )
begin
set eintrag to split(zeile[0], ',');
# Eintrag zerlegen
set liste to liste ++ eintrag;
end
end
while ( zeile[1] != 1 ); # Bei Leerzeile Schleife beenden
Fclose(datei); # Datei schließen
return 1;
end
# 'eintrag_einfuegen' gestattet es dem Anwender, einen neuen Namen in die
# Liste aufzunehmen. Dazu werden Namen und Nummer im Dialog abgefragt. Falls
# der Name schon existiert, wird nur die Nummer gemäß der Eingabe geändert.
eintrag_einfuegen()
begin
if ( liste_lesen() == 0 ) # Liste in den Speicher holen
begin
lprint('Liste nicht verfügbar.');
return 0;
end
lprint("Neuer Name?"); # Name abfragen
set name to inputline();
lprint("Nummer?"); # Nummer abfragen
set nummer to inputline();
set pos to liste ? name;
if ( pos >= 0 ) # Prüfen, ob Name schon existiert
begin
lprint("Name existiert schon.");
set liste[pos + 1] to nummer; # Neue Nummer hinter Namen speichern
end
else
begin
set liste to liste ++ name; # Name und Nummer
set liste to liste ++ nummer; # an die Liste anhängen
end
liste_sichern(); # Liste wieder zurückschreiben
end
# 'eintrag_loeschen' entfernt einen Namen nebst Nummer aus der Liste. Dazu
# wird der Name im Dialog abgefragt.
eintrag_loeschen()
begin
if ( liste_lesen() == 0 ) # Liste in den Speicher holen
begin
lprint('Liste nicht verfügbar.');
return 0;
end
lprint("Welchen Namen löschen?"); # Name abfragen
set name to inputline();
set pos to liste ? name; # Position in der Liste bestimmen
if ( pos < 0 )
begin
lprint("Name existiert nicht.");
return 0;
end
delete liste[i:2]; # Name & Nummer löschen
liste_sichern(); # Liste wieder zurückschreiben
end
# 'liste_anzeigen' 'druckt' den Inhalt der Liste in das 'SCEleton'-Fenster.
liste_anzeigen()
begin
if ( liste_lesen() == 0 ) # Liste in den Speicher holen
begin
lprint('Liste nicht verfügbar.');
return 0;
end
set len to @liste;
set i to 0;
while ( i < len ) # Zeile für Zeile ausgeben
begin
lprint('Nr: %3d, Name: %20s, Tel: %20s',
i / 2 + 1, liste[i], liste[i + 1]);
# Name und Nummer formatieren & durchnummerieren
set i to i + 2;
end
end